String k = null; while((je = jis.getNextJarEntry()) != null) { String entryName = je.getName(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); BufferedInputStream bis = new BufferedInputStream(jis); int i; while((i = bis.read()) != -1) baos.write(i); byte[] buf = baos.toByteArray(); if (entryName.endsWith(".class")) { k = entryName.substring(0, entryName.lastIndexOf('.')).replace('/', '.'); if (handler.allPermissionPolicy == null) jarCl = defineClass(k, buf, 0, buf.length); else { java.security.cert.Certificate[] c = je.getCertificates(); if (c == null) { if (protectionDomain0 == null) { CodeSource cs = new CodeSource(baseURL, certificate0); protectionDomain0 = new ProtectionDomain(cs, policy.getPermissions(cs)); } jarCl = defineClass(k, buf, 0, buf.length, protectionDomain0); } else { Iterator certIt = protectionDomains.keySet().iterator(); while(certIt.hasNext()) { java.security.cert.Certificate[] cert = (java.security.cert.Certificate[]) certIt.next(); if (cert.length != c.length) break; int j = 0; for (; j < cert.length; ++j) { if (!c[j].equals(cert[j])) break; } if (j == c.length) { jarCl = defineClass(k, buf, 0, buf.length,(ProtectionDomain) protectionDomains.get(cert)); break; } } if (jarCl == null) { CodeSource cs = new CodeSource(baseURL, c); ProtectionDomain protectionDomain = new ProtectionDomain(cs, policy.getPermissions(cs)); jarCl = defineClass(k, buf, 0, buf.length, protectionDomain); protectionDomains.put(c, protectionDomain); } } } if (jarCl != null) { classes.put(k, jarCl); ++ size; } } } jis.close();